//
// Created by fengg on 2020/3/11.
//
//
//  三个农民每天清晨5点起床，然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶，一直到1000秒。
//  第二个农民在700秒开始，在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的
//  连续时间为900秒(从300秒到1200秒)，而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒
//  到1500秒)。
//  你的任务是编一个程序，读入一个有N个农民(1 <= N <= 5000)挤N头牛的工作时间列表，计算以下两点(均以秒为单位):
//
//  最长至少有一人在挤奶的时间段。
//  最长的无人挤奶的时间段。（从有人挤奶开始算起）
//
//
//
#include <iostream>

int timeMap[1000000];
int maxTime;
int main(){
    int numMen;
    std::cin >> numMen;

    while (numMen--){
        int begin,end;
        std::cin >> begin >> end;
        timeMap[begin]++;
        timeMap[end]--;
        maxTime = maxTime >= end ? maxTime : end;


    }
    int i=0;
    while (!timeMap[i]) i++;
    int firstMark = i;
    int curr=timeMap[i++];
    int totalTime=0,maxWorkTime = 0,maxIdleTime = 0;
    for (; i < maxTime; ++i) {
        totalTime++;
        if(timeMap[i]){
            if(curr) {
                if(!(timeMap[i]+curr)) {
                    maxWorkTime = maxWorkTime >= totalTime ? maxWorkTime : totalTime;
                    totalTime = 0;

                }
                curr += timeMap[i];
            }
            else {
                maxIdleTime = maxIdleTime >= totalTime ? maxIdleTime : totalTime;
                totalTime = 0;
                curr += timeMap[i];
            }
        }
    }
    if (maxIdleTime == 0)
        maxWorkTime = maxTime - firstMark;
    std::cout << maxWorkTime << " " << maxIdleTime;

}
